#include "./queue.h"
#include <stdio.h>
#include <stdlib.h>

Queue *createQueue()
{
	Queue *queue = (Queue *)malloc(sizeof(Queue));
	queue->rear = queue->front = 0;
	return queue;
}

int queueLength(Queue *queue)
{
	// 循环队列的长度如此计算：
	// 当rear > front时，即为rear - front
	// 当front > rear时，队列分为前面的rear - 0和后面的MAX_SIZE - front，加起来就是rear - front + MAX_SIZE
	// 所以有一通用计算公式：(rear - front + MAX_SIZE) % MAX_SIZE
	return (queue->rear - queue->front + MAX_SIZE) % MAX_SIZE;
}

int queueEmpty(Queue *queue)
{
	return queue->rear == queue->front;
}

int queueFull(Queue *queue)
{
	return (queue->rear + 1) % MAX_SIZE == queue->front;
}

void enterQueue(Queue *queue, int data)
{
	if (queueFull(queue))
	{
		printf("队列满！\n");
		return;
	}
	queue->data[queue->rear] = data;
	queue->rear = (queue->rear + 1) % MAX_SIZE;
}

int deQueue(Queue *queue)
{
	if (queueEmpty(queue))
	{
		printf("队列空！\n");
		return -1;
	}
	int out = queue->data[queue->front];
	queue->front = (queue->front + 1) % MAX_SIZE;
	return out;
}